package design.patterns.creational.prototype;

import java.util.Date;

/**
 * @author gjx
 * @version v1.0
 * @Description   原型模式
 * @date 2019/4/1 9:50
 */

/**
 * 原型模式：通过new产生一个对象需要非常繁琐的数据准备或访问权限，则可以使用原型模式。
 * 就是java中的克隆技术，以某个对象为原型，复制出新的对象。显然，新的对象具备原型对象的特点。
 *
 * 优势：效率高（直接克隆，避免了重新执行构造步骤）。
 *
 * 克隆类似于new，但是不同于new。new创建新的对象属性采用的是默认值。
 * 克隆出的对象的属性值完全和原型对象相同。并且克隆出的新对象改变不会影响原型对象。然后，再修改克隆对象的值
 */
//浅克隆
public class Test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Computer computer = new Computer();
        Date date = new Date();
        computer.setName("联想拯救者");
        computer.setPrice(5000D);
        computer.setDate(date);

        Computer tmpCompute = (Computer) computer.clone();
        System.out.println(computer);
        System.out.println(tmpCompute);


        date.setTime(1000000000);
        System.out.println(computer);
        System.out.println(tmpCompute);
    }
}
